// 新的数据结构
// 常用方法
// 遍历
// 应用场景
// weakset


// let s=new Set([1,2,3,3])//{1,2,3}唯一性
// console.log(s);
// s.add('zz').add('wudi')
// s.delete(2)
// s.clear()//Set(0) {size: 0}
// console.log(s.has(1));//判断元素是否存在 存在true
// console.log(s);//Set(5) {1, 2, 3, 'zz', 'wudi'}
// console.log(s.size);//4
// s.forEach(item=>console.log(item))
// for (const item of s) {
//     console.log(item);
// }

// for (const item of s.values()) {
//     console.log(item);
// }
// for (const item of s.keys()) {
//     console.log(item);
// }


// for (const item of s.entries()) {
//     console.log(item[0]);
// }

// 数组去重
// let arr=[1,1,2,2,4]
// let  s =new Set(arr)
// console.log(s);

let arr1=[1,1,2,2,4,5,6]
let arr2=[2,3,4,5,1,2]
// let s=new Set([...arr1,...arr2])
// console.log(s);//Set(5) {1, 2, 4, 3, 5}

// console.log([...s]);
// console.log(Array.from(s));

// 交集
// let s1=new Set(arr1)
// let s2=new Set(arr2)
// let result=new Set(arr1.filter(item=>s2.has(item)))
// console.log(result);

// 差集
// let s1=new Set(arr1)
// let s2=new Set(arr2)
// let s4=new Set(arr1.filter(item=>!s2.has(item)))
// let s5=new Set(arr1.filter(item=>!s1.has(item)))
// console.log(s4,s5);
// let result=([...s4,...s5])
// console.log(result);

// WeakSet
let ws=new WeakSet()
const obj1={
    id:'11'
}
const obj2={
    id:'22'
}
ws.add(obj1)
ws.add(obj2)
ws.delete(obj1)
console.log(ws.has(obj2));
console.log(ws);

// 垃圾回收机制GC 
// WeakSet弱引用 不会进入垃圾回收机制

// WeakSet与set区别
// WeakSet只能存储对象 Set可以循环遍历 WeakSet是弱引用
